PL/SQL-এ Cursors হল একটি বিশেষ ধরনের সিস্টেম যা ডেটাবেসের রেকর্ডগুলি প্রক্রিয়া করার জন্য ব্যবহৃত হয়। Cursors ডেটাবেসের তথ্য পেতে এবং সেগুলি প্রোগ্রাম কোডে ব্যবহারের জন্য ব্যবহৃত হয়। সাধারণভাবে, Cursors দুটি প্রকারের হয়: Implicit Cursors এবং Explicit Cursors।
১. Implicit Cursor (অটোমেটিক কার্সর)
Implicit Cursor হল Oracle ডাটাবেস দ্বারা অটোমেটিক্যালি তৈরি করা একটি cursor। যখন আপনি একটি SQL স্টেটমেন্ট (যেমন SELECT, INSERT, UPDATE, DELETE) চালান, তখন Oracle স্বয়ংক্রিয়ভাবে এই Implicit Cursor তৈরি করে। এটি ডেটাবেসের কনফিগারেশন অনুসারে, ডেটা ফেচ করার এবং প্রক্রিয়া করার জন্য কোনো কোড লিখতে হয় না।
বিশেষত্ব:
- স্বয়ংক্রিয়ভাবে তৈরি হয়: Oracle ডাটাবেস যখন একটি
SELECTবাDML(Data Manipulation Language) স্টেটমেন্ট চালায়, তখন এটি অটোমেটিকভাবে একটি Implicit Cursor তৈরি করে। - ডেটা রিটার্নের পর কাজ: এটা সাধারণত একক সারির রেকর্ড বা প্রভাবিত সারির সংখ্যা রিটার্ন করতে ব্যবহৃত হয়।
- পদক্ষেপ নির্ধারণ:
SQL%FOUND,SQL%NOTFOUND,SQL%ROWCOUNTএবংSQL%ISOPENএর মতো system attributes দ্বারা আপনি Implicit Cursor এর অবস্থা চেক করতে পারেন।
উদাহরণ:
DECLARE
v_emp_name VARCHAR2(50);
BEGIN
-- Implicit Cursor for SELECT query
SELECT employee_name INTO v_emp_name
FROM employees
WHERE employee_id = 101;
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_emp_name);
END;
এখানে:
SELECTস্টেটমেন্টের জন্য Oracle নিজে থেকেই Implicit Cursor তৈরি করেছে।v_emp_nameভেরিয়েবলে একটি রেকর্ড ফেচ করা হয়েছে।
System Attributes:
SQL%FOUND: যখন কোনো রেকর্ড পাওয়া যায়, তখন এটিTRUEরিটার্ন করে।SQL%NOTFOUND: যখন কোনো রেকর্ড পাওয়া না যায়, তখন এটিTRUEরিটার্ন করে।SQL%ROWCOUNT: প্রভাবিত সারির সংখ্যা প্রদান করে।SQL%ISOPEN: যদি cursor খোলা থাকে, তবে এটিTRUEরিটার্ন করে।
২. Explicit Cursor (স্পষ্ট কার্সর)
Explicit Cursor হল একটি প্ল্যানড এবং কাস্টমাইজড Cursor যা প্রোগ্রামার দ্বারা ম্যানুয়ালি তৈরি করা হয়। এটি তখন ব্যবহৃত হয় যখন আপনি একাধিক রেকর্ড বা বড় ফলাফল সেটের সাথে কাজ করতে চান এবং ফলাফল সেটের উপর নির্দিষ্টভাবে কাজ করতে চান।
বিশেষত্ব:
- ম্যানুয়ালি তৈরি করতে হয়: Explicit Cursor ব্যবহার করার জন্য আপনাকে
DECLARE,OPEN,FETCH, এবংCLOSEস্টেটমেন্টগুলি ম্যানুয়ালি কোডে উল্লেখ করতে হয়। - একাধিক রেকর্ড: এটি একাধিক রেকর্ড ফেচ এবং পরিচালনা করার জন্য ব্যবহৃত হয়।
- ফলাফল সেট পরিচালনা: Explicit Cursor ব্যবহারের সময় আপনি সারি সারি রেকর্ড প্রক্রিয়া করতে পারেন।
Explicit Cursor এর ধাপসমূহ:
- DECLARE: Cursor এর ঘোষণা করা।
- OPEN: Cursor খোলা এবং query চালানো।
- FETCH: Cursor থেকে ডেটা বের করা।
- CLOSE: Cursor বন্ধ করা।
উদাহরণ:
DECLARE
CURSOR emp_cursor IS
SELECT employee_id, employee_name
FROM employees
WHERE department_id = 10;
v_emp_id employees.employee_id%TYPE;
v_emp_name employees.employee_name%TYPE;
BEGIN
OPEN emp_cursor; -- Cursor open
LOOP
FETCH emp_cursor INTO v_emp_id, v_emp_name; -- Fetch data into variables
EXIT WHEN emp_cursor%NOTFOUND; -- Exit loop if no data
DBMS_OUTPUT.PUT_LINE('Employee ID: ' || v_emp_id || ', Name: ' || v_emp_name);
END LOOP;
CLOSE emp_cursor; -- Close cursor
END;
এখানে:
emp_cursorহল একটি Explicit Cursor যাemployeesটেবিল থেকে ডেটা ফেচ করতে ব্যবহৃত হয়েছে।FETCHস্টেটমেন্ট ব্যবহার করে একটি করে রেকর্ড ডেটা বের করা হয় এবংEXITলুপটি ত্যাগ করে যদি কোনো রেকর্ড না থাকে।
System Attributes for Explicit Cursor:
%FOUND: যখন ফেচ করা রেকর্ড সফল হয়, এটিTRUEরিটার্ন করে।%NOTFOUND: যখন ফেচ করা রেকর্ড না থাকে, এটিTRUEরিটার্ন করে।%ROWCOUNT: ফেচ করা সারির সংখ্যা।%ISOPEN: Cursor খোলা থাকলে এটিTRUEরিটার্ন করে।
Implicit এবং Explicit Cursors এর মধ্যে পার্থক্য
| বিষয় | Implicit Cursor | Explicit Cursor |
|---|---|---|
| ডিফিনেশন | স্বয়ংক্রিয়ভাবে তৈরি হয়, কোন কোড লেখা লাগে না। | ম্যানুয়ালি তৈরি এবং পরিচালিত হয়। |
| ব্যবহার | সাধারণত একক SQL স্টেটমেন্টের জন্য ব্যবহৃত। | একাধিক রেকর্ড প্রক্রিয়া করার জন্য ব্যবহৃত। |
| ডেটা ফেচিং | একক রেকর্ড ফেচ করতে ব্যবহৃত। | একাধিক রেকর্ড ফেচ এবং প্রক্রিয়া করতে ব্যবহৃত। |
| রিটার্ন ভ্যালু | শুধুমাত্র একটি একক মান বা রেকর্ড রিটার্ন করে। | একাধিক রেকর্ড রিটার্ন করতে সক্ষম। |
| System Attributes | SQL%FOUND, SQL%NOTFOUND, SQL%ROWCOUNT, SQL%ISOPEN | cursor_name%FOUND, cursor_name%NOTFOUND, cursor_name%ROWCOUNT, cursor_name%ISOPEN |
| স্টেপস | শুধুমাত্র SQL স্টেটমেন্ট চালালেই চলে। | DECLARE, OPEN, FETCH, CLOSE ব্যবহার করতে হয়। |
| প্রকার | স্বয়ংক্রিয় (Implicit)। | ম্যানুয়ালি নির্ধারিত (Explicit)। |
সারাংশ:
- Implicit Cursor হল Oracle দ্বারা স্বয়ংক্রিয়ভাবে তৈরি একটি Cursor যা সাধারণত একক SQL স্টেটমেন্ট (যেমন
SELECT,INSERT,UPDATE,DELETE) কার্যকর করার জন্য ব্যবহৃত হয়। - Explicit Cursor হল একটি কাস্টমাইজড Cursor যা ম্যানুয়ালি তৈরি এবং পরিচালিত হয়, এবং এটি একাধিক রেকর্ড পরিচালনা করতে ব্যবহৃত হয়।
Explicit Cursor ব্যবহার করলে আপনি আরও অনেক বেশি নিয়ন্ত্রণ এবং ফাইন টিউনিং করতে পারবেন, বিশেষ করে যখন একাধিক রেকর্ডের সাথে কাজ করছেন।
Read more